#include<bits/stdc++.h>
#define int long long 
#define mid ((l+r)>>1)
using namespace std;
const int M=4e5+5;
int n,m,t,x,y,z,ans;
int a[M],b[M<<3],k;
struct node{int l,r;}d[M];
set<int>st;
inline int read(){
    int ans=0,w=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
    while(ch<='9'&&ch>='0'){ans=(ans<<3)+(ans<<1)+(ch^48);ch=getchar();}
    return ans*w;
}
inline bool checkin(int x){if(st.find(x)==st.end())return st.insert(x),1;else return st.erase(x),0;}
//插入1，删除0
namespace segment_tree{
    int c[M<<2],s[M<<2],lazy[M<<2];
    inline void up(int p){s[p]=s[p<<1]+s[p<<1|1];}
    inline void down(int p,int l,int r){
        if(!lazy[p])return ;
        lazy[p<<1]=lazy[p<<1|1]=lazy[p];
        s[p<<1]=b[mid]-b[l-1],s[p<<1|1]=b[r]-b[mid];
        lazy[p]=0;
    }
    inline void add(int p,int l,int r,int x,int y){
        if(x<=l&&r<=y){
            c[p]++;
            if(c[p])s[p]=b[r]-b[l-1];
            lazy[p]=1;
            return ;
        }
        down(p,l,r);
        if(x<=mid)add(p<<1,l,mid,x,y);
        if(y>mid)add(p<<1|1,mid+1,r,x,y);
        up(p);
    }
    inline void build(int p=1,int l=1,int r=k){
        c[p]=s[p]=lazy[p]=0;
        if(l==r)return;
        build(p<<1,l,mid),build(p<<1|1,mid+1,r),up(p);
    }
    inline int qr(int p,int l,int r,int x,int y){
        if(x<=l&&y>=r){
            return s[p];
        }
        down(p,l,r);
        int res=0;
        if(x<=mid)res+=qr(p<<1,l,mid,x,y);
        if(y>mid)res+=qr(p<<1|1,mid+1,r,x,y);
        return res;
    }
}
using namespace segment_tree;
inline void sol1(){
    for(int i=1;i<=n;i++){
        build();
        x=a[i];checkin(x);
        auto l=st.begin(),r=st.end();
        r--;
        int pre=0,rep=0;
        m=st.size();
        for(int j=1;j<=m;j++){
            pre+=(*l),rep+=(*r);
            int ll=lower_bound(b+1,b+k+1,pre)-b;
            int rr=lower_bound(b+1,b+k+1,rep-1)-b;
            if(pre<rep)add(1,1,k,ll,rr);
            l++,r--;
        }
        ans=qr(1,1,k,1,k);
        printf("%lld\n",ans);
    }
}
// inline void sol2(){
//     for(int i=1;i<=n;i++){
//         x=a[i];x=checkin(x);
//         if(x==1){

//         }
//     }
// }
signed main(){
    freopen("kte.in","r",stdin);
    freopen("kte.out","w",stdout);
    n=read();
    for(int i=1;i<=n;i++){
        a[i]=read(),x=a[i];
        checkin(x);
        auto l=st.begin(),r=st.end();
        r--;
        int pre=0,rep=0;
        m=st.size();
        for(int j=1;j<=m;j++){
            pre+=(*l),rep+=(*r);
            b[++k]=pre-1,b[++k]=rep-1;
            l++;r--;
        }
    }
    sort(b+1,b+k+1);
    k=unique(b+1,b+k+1)-b-1;
    st.clear();
    // if(n<=30000)
    sol1();
    // else sol2();
    return 0;
}